﻿#pragma once

#include <cstdint>
#include <cmath>

namespace ikit{
  
/*
 * 常量
 */
// 用于0值的
constexpr const float ZERO_EPSILON = 1e-6F;


/*
 * 数字功能
 */
// 判断一个数字是否为0
inline bool is_zero(float value) { return std::fabs(value) < ZERO_EPSILON; }
// 判断一个数字是否不为0
inline bool not_zero(float value) { return std::fabs(value) > ZERO_EPSILON; }
// 判断一个字符串是否是整数
bool is_number(const char* s);
// 判断一个字符串是否是符点数
bool is_float(const char* s);
// 判断一个字符串是否是二进制数
bool is_hex(const char* s);
// 将一个16进制字符转为数字
int hex_to_number(char c);
// 将一个16进制字符转为UINT
uint32_t hex_to_uint(const char* buf);
// 得到一个Hash值
uint32_t hash(const char* str);
uint64_t hash64(const char* str);
// 当传入的value等于0的时候，返回default_value
inline float pick_default(float value, float default_value) {
  return is_zero(value) ? default_value : value;
}
// 当传入的value等于0的时候，返回default_value
inline int pick_default(int value, int default_value) {
  return value == 0 ? default_value : value;
}
inline size_t pick_default(size_t value, size_t default_value) {
  return value == 0 ? default_value : value;
}

}